home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / e / capus2.lha / capus2 / WhatView / Sources / WhatView.e < prev    next >
Encoding:
Text File  |  1995-04-03  |  27.1 KB  |  702 lines

  1. /*===================================================*/
  2. /* Source code generate by Gui2E v0.1 © 1994 NasGûl  */
  3. /*===================================================*/
  4. /*"Peps Header"*/
  5. /*======<<< Peps Header >>>======
  6.  PRGVERSION '0'
  7.  ================================
  8.  PRGREVISION '185'
  9.  ================================
  10.  AUTHOR      'NasGûl'
  11.  ===============================*/
  12. /*===============================
  13.  16/09/94 - Rectification de la procedure p_CloseLibraries()
  14.  17/09/94 - Conflit Avec ToolManager (grosse configuration) ,
  15.             quand WhatView et ToolManager sont dans dans le dossier WBStartup.
  16.             maintenant Whatview lance le WBStart-Handler lors de sa première utilisation,
  17.             et non lors de l'initialisation.
  18.  18/09/94 - Ajout de la fenêtre informations (qui replace le défilement interminable des requesters).
  19.  20/09/94 - la fonte du titre de la fenêtre est maintenant la même que celle de l'ecran.
  20.  05/10/94 - ajout des SubTypes.
  21.  30/01/95 - bug quand l'ENV: n'est pas assigné corigé.
  22.  15/02/95 - WhatView ouvre ses fenêtres sur l'écran public actif (ajout de l'option UNDERMOUSE).
  23.  02/03/95 - Ajout du gadget Cancel dans le requester avant les préférences.
  24.  26/03/95 - Ajout de EditIcon dans WVPrefs,Ajout de la commande associée dans le requester d'EXECUTE (v0.175) + PAT_GAD dans filerequester.
  25.  02/04/95 - Localisation (v 0.185).
  26.  ===============================*/
  27. /**/
  28. OPT OSVERSION=37
  29. OPT LARGE
  30. CONST DEBUG=FALSE
  31. /*"Modules"*/
  32. /*= Modules =*/
  33. MODULE 'intuition/intuition','gadtools','libraries/gadtools',
  34.        'intuition/gadgetclass','intuition/screens','intuition/intuitionbase',
  35.        'graphics/text','exec/lists','exec/nodes',
  36.        'exec/ports','eropenlib','utility/tagitem',
  37.        'wvprefs','whatis','reqtools','libraries/reqtools',
  38.        'wb','utility','workbench/workbench','icon','rexxsyslib','workbench/startup',
  39.        'dos/dos','wbmessage','dos/dostags','dos/dosextens','dos/notify','dos/datetime',
  40.        'exec/libraries',
  41.        'commodities','libraries/commodities',
  42.        'utility',
  43.        'mheader','dos/var'
  44. /**/
  45. /*"Globals Definitions"*/
  46. /*= Erreurs =*/
  47. ENUM ER_NONE,ER_LOCKSCREEN,ER_VISUAL,ER_CONTEXT,ER_MENUS,ER_GADGET,ER_WINDOW,
  48.      ER_NOICON,ER_BADARGS,ER_PORT,ER_APPWIN,ER_NOPREFS,ER_APPITEM,ER_PORTEXIST,
  49.      ER_SIG,ER_CX
  50.  
  51. /*= Constantes Whatis.library =*/
  52. CONST WI_DEEP=$800000CB,WI_BUFFER=$800000CC,WI_BUFLEN=$800000CD
  53. /*= Constantes pour les listes */
  54. CONST LIST_CLEAN=0,
  55.       LIST_REMOVE=1
  56.  
  57. CONST DISP=0,
  58.       DISL=1,
  59.       DISE=-1
  60.  
  61. ENUM ACT_WHATVIEW,ACT_INFO,ACT_ADDICON,ACT_EXECUTE
  62.  
  63.  
  64. DEF i_screen:PTR TO screen,
  65.     i_visual
  66.  
  67. DEF screen:PTR TO screen,
  68.     visual=NIL,
  69.     tattr:PTR TO textattr,
  70.     reelquit=FALSE,
  71.     offx,offy
  72. /*======================================
  73.  = wv Definitions
  74.  ======================================*/
  75. DEF wv_window=NIL:PTR TO window
  76. DEF wv_glist=NIL
  77. /* Gadgets */
  78. ENUM GA_G_WHATVIEW,GA_G_INFO,GA_G_ADDICON,GA_G_EXECUTE,GA_G_PREFS,GA_G_QUIT
  79. /* Gadgets labels of wv */
  80. DEF g_whatview,g_info,g_addicon,g_execute,g_prefs,g_quit
  81. /*=======================================
  82.  = info Definitions
  83.  =======================================*/
  84. DEF info_window=NIL:PTR TO window
  85. DEF info_glist=NIL
  86. /*==================*/
  87. /*     Gadgets      */
  88. /*==================*/
  89. CONST GA_G_INFORM=0
  90. /*=============================
  91.  = Gadgets labels of info
  92.  =============================*/
  93. DEF g_inform
  94. /*===============================*/
  95. /* Application def               */
  96. /*===============================*/
  97. DEF myw=NIL:PTR TO wvbase                       /* PTR base */
  98. DEF wvdisk:PTR TO diskobject                    /* for AppIcon */
  99. DEF prgport=NIL:PTR TO mp                       /* Program port */
  100. DEF dummyport=NIL:PTR TO mp                     /* reply port of the WBstart-Handler Port */
  101. DEF publicport=NIL:PTR TO mp                    /* Public Port of prg */
  102. DEF appicon=NIL,                                /* Appicon */
  103.     appitem=NIL,                                /* AppItem */
  104.     appwindow=NIL,                              /* AppWindow */
  105.     baselock                                    /* lock of current dir */
  106. DEF addicondir[256]:STRING,                     /* path of the icons by def */
  107.     defprefsdir[256]:STRING,                    /* path of WVPrefs */
  108.     defaultdir[256]:STRING,                     /* path for filrrequester */
  109.     defact=-1                                   /* default action (Open Win by def.) */
  110. DEF wb_handle                                   /* address of WBStart-Handler Port */
  111. DEF nreqsig=-1                                  /* Signal to lock env:Whatview.prefs */
  112. DEF prgsig=NIL                                  /* prg signal */
  113. DEF nreq:PTR TO notifyrequest                   /* notifyrequest to lock env:whatview.prefs */
  114. DEF maxarg=20                                   /* max of args by def */
  115. DEF winx=10,winy=10                             /* Winx and Winy */
  116. DEF oktext:PTR TO LONG                          /* text ok gadget (filerequester) */
  117. DEF wtxt[80]:STRING                             /* title of window */
  118. DEF infolist:PTR TO lh                          /* list for info window */
  119. DEF undermouse=FALSE                            /* Open whatview window under the mouse pointer (TRUE/FALSE) */
  120. /**/
  121. /*"Pmodules"*/
  122. PMODULE 'WVDATA'
  123. PMODULE 'WVCX'
  124. PMODULE 'PModules:Plist/p_CleanList'
  125. PMODULE 'PModules:Plist/p_AjouteNode'
  126. PMODULE 'PModules:PMHeader'
  127. PMODULE 'PModules:Plist/p_WriteFList'
  128. PMODULE 'WhatView_Cat'
  129. PMODULE 'WhatViewMessage'
  130. /**/
  131. /*"p_InitWVAPP()"*/
  132. PROC p_InitWVAPP() HANDLE 
  133. /*===============================================================================
  134.  = Para         : NONE
  135.  = Return       : ER_NONE if ok,else the error.
  136.  = Description  : Init all list,ports,appicon and appitem.
  137.  ==============================================================================*/
  138.     DEF txt[80]:STRING
  139.     DEF test
  140.     dWriteF(['p_InitWVAPP()\n'],0)
  141.     StringF(txt,'WhatView <\s>',hotkey)
  142.     StrCopy(wtxt,txt,ALL)
  143.     oktext:=[get_WhatView_string(MSG_GAD_WHATVIEW),get_WhatView_string(MSG_GAD_INFO),get_WhatView_string(MSG_GAD_ADDICON),get_WhatView_string(MSG_GAD_EXECUTE)]
  144.     IF (prgsig:=AllocSignal(-1))=NIL THEN Raise(ER_SIG)
  145.     myw:=New(SIZEOF wvbase)
  146.     myw.adremptylist:=p_InitList()
  147.     myw.adractionlist:=p_InitList()
  148.     infolist:=p_InitList()
  149.     IF (prgport:=CreateMsgPort())=NIL THEN Raise(ER_PORT)
  150.     IF (dummyport:=CreateMsgPort())=NIL THEN Raise(ER_PORT)
  151.     IF (publicport:=p_CreatePublicPort('WhatViewPort',0))=NIL THEN Raise(ER_PORT)
  152.     p_InitPositionIcon(wvdisk)
  153.     IF (appitem:=AddAppMenuItemA(0,0,'WhatView',prgport,[MTYPE_APPMENUITEM,TAG_DONE]))=NIL THEN Raise(ER_APPITEM)
  154.     IF (appicon:=AddAppIconA(0,0,'WhatView',prgport,NIL,wvdisk,
  155.                              [MTYPE_APPICON,MTYPE_ICONPUT,wvdisk,TAG_DONE]))=NIL THEN Raise(ER_NOICON)
  156.     IF wvdisk THEN FreeDiskObject(wvdisk)
  157.     IF (test:=p_InitLockConfigFile())=NIL THEN Raise(ER_NOPREFS)
  158.     Raise(ER_NONE)
  159. EXCEPT
  160.     RETURN exception
  161. ENDPROC
  162. /**/
  163. /*"p_RemWVAPP()"*/
  164. PROC p_RemWVAPP() 
  165. /*===============================================================================
  166.  = Para         : NONE
  167.  = Return       : NONE
  168.  = Description  : Remove all lists,ports and Appicon,appitem.
  169.  ==============================================================================*/
  170.     dWriteF(['p_RemWVAPP()\n'],0)
  171.     p_RemLockConfigFile()
  172.     IF appicon THEN RemoveAppIcon(appicon)
  173.     IF appitem THEN RemoveAppMenuItem(appitem)
  174.     IF publicport THEN p_DeletePublicPort(publicport)
  175.     IF dummyport THEN DeleteMsgPort(dummyport)
  176.     IF prgport THEN DeleteMsgPort(prgport)
  177.     IF myw.adremptylist THEN p_RemoveArgList(myw.adremptylist,TRUE)
  178.     IF myw.adractionlist THEN p_RemoveActionList(myw.adractionlist,TRUE)
  179.     IF myw THEN Dispose(myw)
  180.     IF infolist THEN p_CleanList(infolist,FALSE,0,LIST_REMOVE)
  181.     IF prgsig THEN FreeSignal(prgsig)
  182. ENDPROC
  183. /**/
  184. /*"p_CreatePublicPort(name,priority)"*/
  185. PROC p_CreatePublicPort(name,priority) 
  186. /*===============================================================================
  187.  = Para         : name (STRING),pri.
  188.  = Return       : address of port if ok,else NIL.
  189.  = Description  : Create a public port.
  190.  ==============================================================================*/
  191.     DEF p_node:PTR TO ln
  192.     DEF myport:PTR TO mp
  193.     dWriteF(['p_CreatePublicPort()\n'],0)
  194.     myport:=CreateMsgPort()
  195.     IF myport=0 THEN RETURN NIL
  196.     p_node:=myport.ln
  197.     p_node.name:=name
  198.     p_node.pri:=priority
  199.     p_node.type:=NT_MSGPORT
  200.     myport.flags:=PA_SIGNAL
  201.     AddPort(myport)
  202.     RETURN myport
  203. ENDPROC
  204. /**/
  205. /*"p_DeletePublicPort(adr_port)"*/
  206. PROC p_DeletePublicPort(adr_port:PTR TO mp) 
  207. /*===============================================================================
  208.  = Para         : address of a public port.
  209.  = Return       : NONE.
  210.  = Description  : Delete a public message port.
  211.  ==============================================================================*/
  212.     dWriteF(['p_DeletePublicPort()\n'],0)
  213.     IF adr_port THEN RemPort(adr_port)
  214.     IF adr_port THEN DeleteMsgPort(adr_port)
  215. ENDPROC
  216. /**/
  217. /*"p_ReadPrefsFile(source)"*/
  218. PROC p_ReadPrefsFile(source) 
  219. /*===============================================================================
  220.  = Para         : the prefs file source.
  221.  = Return       : TRUE if ok,else FALSE
  222.  = Description  : Read the prefs file.
  223.  ==============================================================================*/
  224.     DEF len,a,adr:PTR TO CHAR,buf,handle,flen=TRUE,pos
  225.     DEF chunk
  226.     DEF pv[256]:STRING
  227.     DEF node:PTR TO ln
  228.     DEF addact:PTR TO actionnode
  229.     DEF list:PTR TO lh,nn=NIL
  230.     dWriteF(['p_ReadPrefsFile()\n'],0)
  231.     IF (flen:=FileLength(source))=-1 THEN RETURN FALSE
  232.     IF (buf:=New(flen+1))=NIL THEN RETURN FALSE
  233.     IF (handle:=Open(source,1005))=NIL THEN RETURN FALSE
  234.     len:=Read(handle,buf,flen)
  235.     Close(handle)
  236.     IF len<1 THEN RETURN FALSE
  237.     adr:=buf
  238.     chunk:=Long(adr)
  239.     IF chunk<>ID_WVPR
  240.         Dispose(buf)
  241.         RETURN FALSE
  242.     ENDIF
  243.     p_RemoveActionList(myw.adractionlist,FALSE)
  244.     FOR a:=0 TO len-1
  245.         IF Even(adr+a)
  246.             chunk:=Long(adr+a)
  247.             pos:=adr+a
  248.             SELECT chunk
  249.                 CASE ID_WVAC
  250.                     pos:=pos+4
  251.                     node:=New(SIZEOF ln)
  252.                     addact:=New(SIZEOF actionnode)
  253.                     addact.exectype:=Int(pos)
  254.                     addact.stack:=Long(pos+2)
  255.                     addact.priority:=Int(pos+6)
  256.                     addact.usesubtype:=Int(pos+8)
  257.                     StringF(pv,'\s',pos+10)
  258.                     node.name:=String(EstrLen(pv))
  259.                     node.succ:=0
  260.                     StrCopy(node.name,pv,ALL)
  261.                     IF Even(EstrLen(pv))
  262.                         pos:=pos+10+EstrLen(pv)+2
  263.                     ELSE
  264.                         pos:=pos+10+EstrLen(pv)+1
  265.                     ENDIF
  266.                     StringF(pv,'\s',pos)
  267.                     addact.command:=String(EstrLen(pv))
  268.                     StrCopy(addact.command,pv,ALL)
  269.                     IF Even(EstrLen(pv))
  270.                         pos:=pos+EstrLen(pv)+2
  271.                     ELSE
  272.                         pos:=pos+EstrLen(pv)+1
  273.                     ENDIF
  274.                     StringF(pv,'\s',pos)
  275.                     addact.currentdir:=String(EstrLen(pv))
  276.                     StrCopy(addact.currentdir,pv,ALL)
  277.                     IF Even(EstrLen(pv))
  278.                         pos:=pos+EstrLen(pv)+2
  279.                     ELSE
  280.                         pos:=pos+EstrLen(pv)+1
  281.                     ENDIF
  282.                     CopyMem(node,addact.node,SIZEOF ln)
  283.                     AddTail(myw.adractionlist,addact.node)
  284.                     nn:=p_GetNumNode(myw.adractionlist,addact.node)
  285.                     IF nn=-1
  286.                         list:=myw.adractionlist
  287.                         list.head:=addact.node
  288.                         node.pred:=0
  289.                     ENDIF
  290.                     addact.numarg:=0
  291.                     addact.cmd:=0
  292.                     IF node THEN Dispose(node)
  293.                 CASE ID_DEFA
  294.                     pos:=pos+4
  295.                     defact:=Long(pos)
  296.             ENDSELECT
  297.         ENDIF
  298.     ENDFOR
  299.     Dispose(buf)
  300.     RETURN TRUE
  301. ENDPROC
  302. /**/
  303. /*"p_InitLockConfigFile()"*/
  304. PROC p_InitLockConfigFile() 
  305. /*===============================================================================
  306.  = Para         : NONE
  307.  = Return       : NONE
  308.  = Description  : Lock the prefs file.
  309.  ==============================================================================*/
  310.     DEF flen
  311.     dWriteF(['p_InitLockConfig()\n'],0)
  312.     IF (flen:=FileLength('ENV:WhatView.prefs'))=-1 THEN RETURN 0
  313.     nreq:=New(SIZEOF notifyrequest)
  314.     nreq.name:='Env:WhatView.prefs'
  315.     nreq.flags:=NRF_SEND_SIGNAL
  316.     nreq.port:=FindTask(0)
  317.     nreq.signalnum:=AllocSignal(nreqsig)
  318.     nreqsig:=nreq.signalnum
  319.     StartNotify(nreq)
  320.     RETURN 1
  321. ENDPROC
  322. /**/
  323. /*"p_RemLockConfigFile()"*/
  324. PROC p_RemLockConfigFile() 
  325. /*===============================================================================
  326.  = Para         : NONE
  327.  = Return       : NONE
  328.  = Description  : Unlock the prefs file.
  329.  ==============================================================================*/
  330.     dWriteF(['p_RemLockConfig()\n'],0)
  331.     IF nreqsig THEN FreeSignal(nreqsig)
  332.     IF nreq THEN EndNotify(nreq)
  333. ENDPROC
  334. /**/
  335. /*"p_StartCli()"*/
  336. PROC p_StartCli() HANDLE 
  337. /*===============================================================================
  338.  = Para         : NONE.
  339.  = Return       : ER_NONE if ok,else the error.
  340.  = Description  : Get .info and lock current dir.
  341.  ==============================================================================*/
  342.     DEF myargs:PTR TO LONG,rdargs=NIL
  343.     DEF prgname[256]:STRING
  344.     DEF pro:PTR TO process
  345.     dWriteF(['p_StartCli()\n'],0)
  346.     myargs:=[0,0,0]
  347.     IF rdargs:=ReadArgs('HK=CX_POPKEY/K,PRI=CX_PRIORITY/N,HKP=HotKeyPrefs/K',myargs,NIL)
  348.         GetProgramName(prgname,256)
  349.         IF myargs[0] THEN StrCopy(hotkey,myargs[0],ALL) ELSE StrCopy(hotkey,'ralt help',ALL)
  350.         IF myargs[1] THEN cxpri:=Long(myargs[1]) ELSE cxpri:=0
  351.         IF myargs[2] THEN StrCopy(hotkeyprefs,myargs[2],ALL) ELSE StrCopy(hotkeyprefs,'shift ralt help',ALL)
  352.         IF (wvdisk:=GetDiskObject(prgname))=NIL THEN Raise(ER_NOICON)
  353.         pro:=FindTask(0)
  354.         baselock:=CurrentDir(pro.currentdir)
  355.     ELSE
  356.         Raise(ER_BADARGS)
  357.     ENDIF
  358.     Raise(ER_NONE)
  359. EXCEPT
  360.     IF rdargs THEN FreeArgs(rdargs)
  361.     RETURN exception
  362. ENDPROC
  363. /**/
  364. /*"p_StartWb()"*/
  365. PROC p_StartWb() HANDLE 
  366. /*===============================================================================
  367.  = Para         : NONE
  368.  = Return       : ER_NONE if ok,else the error.
  369.  = Description  : Get .info and lock current dir.
  370.  ==============================================================================*/
  371.     DEF wb:PTR TO wbstartup
  372.     DEF args:PTR TO wbarg
  373.     DEF prgname[256]:STRING
  374.     dWriteF(['p_StartWb()\n'],0)
  375.     wb:=wbmessage
  376.     args:=wb.arglist
  377.     /*FindTask(0)*/
  378.     StrCopy(prgname,args[0].name,ALL)
  379.     baselock:=CurrentDir(args[0].lock)
  380.     IF (wvdisk:=GetDiskObject(prgname))=NIL THEN Raise(ER_NOICON)
  381.     Raise(ER_NONE)
  382. EXCEPT
  383.     RETURN exception
  384. ENDPROC
  385. /**/
  386. /*"p_InitPositionIcon(s_d_o)"*/
  387. PROC p_InitPositionIcon(s_d_o:PTR TO diskobject) 
  388. /*===============================================================================
  389.  = Para         : address of diskobject structure.
  390.  = Return       : NONE.
  391.  = Description  : look for POSX,POSY and the default dirs.
  392.  ==============================================================================*/
  393.     DEF defdir[256]:STRING
  394.     DEF max=NIL
  395.     dWriteF(['p_InitPositionIcon()\n'],0)
  396.     s_d_o.currentx:=Val(FindToolType(s_d_o.tooltypes,'POSX'),NIL)
  397.     s_d_o.currenty:=Val(FindToolType(s_d_o.tooltypes,'POSY'),NIL)
  398.     IF defdir:=FindToolType(s_d_o.tooltypes,'DEFDIR')
  399.         IF defdir THEN StrCopy(addicondir,defdir,ALL)
  400.     ELSE
  401.         StrCopy(addicondir,'Env:Sys',ALL)
  402.     ENDIF
  403.     IF defdir:=FindToolType(s_d_o.tooltypes,'DEFPREFSDIR')
  404.         IF defdir THEN StrCopy(defprefsdir,defdir,ALL)
  405.     ELSE
  406.         StrCopy(defprefsdir,'Sys:Prefs',ALL)
  407.     ENDIF
  408.     IF max:=FindToolType(s_d_o.tooltypes,'MAXARG')
  409.         IF max THEN maxarg:=Val(max,NIL)
  410.         IF maxarg>20 THEN maxarg:=20
  411.     ENDIF
  412.     IF defdir:=FindToolType(s_d_o.tooltypes,'UNDERMOUSE') THEN undermouse:=TRUE
  413.     IF wbmessage<>NIL
  414.         IF defdir:=FindToolType(s_d_o.tooltypes,'CX_POPKEY')
  415.             IF defdir THEN StrCopy(hotkey,defdir,ALL)
  416.         ELSE
  417.             StrCopy(hotkey,'ralt help',ALL)
  418.         ENDIF
  419.         IF defdir:=FindToolType(s_d_o.tooltypes,'CX_POPKEYPREFS')
  420.             IF defdir THEN StrCopy(hotkeyprefs,defdir,ALL)
  421.         ELSE
  422.             StrCopy(hotkeyprefs,'shift ralt help',ALL)
  423.         ENDIF
  424.         IF defdir:=FindToolType(s_d_o.tooltypes,'CX_PRIORITY')
  425.             cxpri:=Val(defdir,NIL)
  426.         ELSE
  427.             cxpri:=0
  428.         ENDIF
  429.     ENDIF
  430. ENDPROC
  431. /**/
  432. /*"p_DoAction(a)"*/
  433. PROC p_DoAction(a) 
  434.     DEF tt
  435.     IF p_EmptyList(myw.adremptylist)<>-1
  436.         p_WriteFArgList(myw.adremptylist,a)
  437.     ELSE
  438.         IF (tt:=p_WVFileRequester(a))
  439.             p_WriteFArgList(myw.adremptylist,a)
  440.         ENDIF
  441.     ENDIF
  442.     p_RemoveArgList(myw.adremptylist,FALSE)
  443.     p_CleanArgActionList(myw.adractionlist)
  444. ENDPROC
  445. /**/
  446. /*"p_WBRun(com,di,st,pr,num_arg,arg_list)"*/
  447. PROC p_WBRun(com,dir,st,pr,num_arg,arg_list:PTR TO LONG) HANDLE 
  448. /*===============================================================================
  449.  = Para         : command (STRING),current dir of the command,the stack,the pri,the num of args,the args
  450.  = Return       : ER_NONE if ok,else the error.
  451.  = Description  : Start a command with the WBStart-Handler port.
  452.  ==============================================================================*/
  453.     DEF execmsg:PTR TO mn
  454.     DEF wbsm:wbstartmsg
  455.     DEF rc=FALSE
  456.     DEF node:PTR TO ln
  457.     DEF oldcd
  458.     DEF b,t
  459.     Forbid()
  460.     wb_handle:=FindPort('WBStart-Handler Port')
  461.     Permit()
  462.     IF wb_handle=0 THEN wb_handle:=p_InitWBHandler()
  463.     dWriteF(['p_WBRun() NumArg:\d ','Commande:\s\n'],[num_arg,com])
  464.     wbsm:=New(SIZEOF wbstartmsg)
  465.     execmsg:=wbsm
  466.     node:=execmsg
  467.     node.type:=NT_MESSAGE
  468.     node.pri:=0
  469.     execmsg.replyport:=dummyport
  470.     wbsm.name:=com
  471.     wbsm.dirlock:=Lock(dir,-2)
  472.     wbsm.stack:=st
  473.     wbsm.prio:=pr
  474.     wbsm.numargs:=num_arg
  475.     wbsm.arglist:=arg_list
  476.     oldcd:=CurrentDir(wbsm.dirlock)
  477.     Forbid()
  478.     IF wb_handle
  479.         PutMsg(wb_handle,wbsm)
  480.     ENDIF
  481.     Permit()
  482.     IF wb_handle
  483.         WaitPort(dummyport)
  484.         GetMsg(dummyport)
  485.         rc:=wbsm.stack
  486.     ENDIF
  487.     IF rc=0 THEN p_MakeWVRequest(get_WhatView_string(MSGWHATVIEW_WBRUN_FAILED),get_WhatView_string(MSGWHATVIEW_COMASS_GAD),NIL)
  488.     Raise(ER_NONE)
  489. EXCEPT
  490.     CurrentDir(oldcd)
  491.     IF wbsm.dirlock THEN UnLock(wbsm.dirlock)
  492.     IF wbsm THEN Dispose(wbsm)
  493.     RETURN exception
  494. ENDPROC
  495. /**/
  496. /*"p_CLIRun(cmd,dir,sta,pp)"*/
  497. PROC p_CLIRun(cmd,dir,sta,pp) HANDLE 
  498. /*===============================================================================
  499.  = Para         : command line,current dir of command,the stack,the pri.
  500.  = Return       : ER_NONE if ok,else the error.
  501.  = Description  : Start a Cli program.
  502.  ==============================================================================*/
  503.     DEF ofh:PTR TO filehandle
  504.     DEF ifh:PTR TO filehandle
  505.     DEF newct=NIL:PTR TO mp
  506.     DEF oldct:PTR TO mp
  507.     DEF oldcd
  508.     DEF newcd
  509.     DEF test
  510.     dWriteF(['p_CLIRun() cmd:\s\n'],[cmd])
  511.     IF ofh:=Open('NIL:',1006)
  512.         IF IsInteractive(ofh)
  513.             newct:=ofh.type
  514.             oldct:=SetConsoleTask(newct)
  515.             ifh:=Open('CONSOLE:',1005)
  516.             SetConsoleTask(oldct)
  517.         ELSE
  518.             ifh:=Open('NIL:',1005)
  519.         ENDIF
  520.     ENDIF
  521.     newcd:=Lock(dir,-2)
  522.     oldcd:=CurrentDir(newcd)
  523.     IF test:=SystemTagList(cmd,[SYS_OUTPUT,NIL,
  524.                          SYS_INPUT,NIL,
  525.                          SYS_ASYNCH,TRUE,
  526.                          SYS_USERSHELL,TRUE,
  527.                          NP_STACKSIZE,sta,
  528.                          NP_PRIORITY,pp,
  529.                          NP_PATH,NIL,
  530.                          NP_CONSOLETASK,newct,
  531.                          0])
  532.     ENDIF
  533.     CurrentDir(oldcd)
  534.     IF newcd THEN UnLock(newcd)
  535.     IF ofh THEN Close(ofh)
  536.     IF ifh THEN Close(ifh)
  537.     Raise(ER_NONE)
  538. EXCEPT
  539.     RETURN exception
  540. ENDPROC
  541. /**/
  542. /*"p_InitWBHandler()"*/
  543. PROC p_InitWBHandler() HANDLE 
  544. /*===============================================================================
  545.  = Para         : NONE
  546.  = Return       : ER_NONE if ok,else the error.
  547.  = Description  : Init the WBStart-Handler Port.
  548.  ==============================================================================*/
  549.     DEF ifh
  550.     DEF ofh
  551.     DEF wbh
  552.     dWriteF(['p_InitWBHandler()\n'],0)
  553.     IF (ifh:=Open('NIL:',1006))=NIL THEN Raise(NIL)
  554.     IF (ofh:=Open('NIL:',1005))=NIL THEN Raise(NIL)
  555.     SystemTagList('L:WBStart-Handler',[SYS_INPUT,ifh,
  556.                                       SYS_OUTPUT,ofh,
  557.                                       SYS_ASYNCH,TRUE,
  558.                                       SYS_USERSHELL,TRUE,
  559.                                       NP_CONSOLETASK,NIL,
  560.                                       NP_WINDOWPTR,NIL])
  561.     Delay(25)
  562.     wbh:=FindPort('WBStart-Handler Port')
  563.     Raise(wbh)
  564. EXCEPT
  565.     IF Not(wbh)
  566.         IF ifh THEN Close(ifh)
  567.         IF ofh THEN Close(ofh)
  568.     ENDIF
  569.     RETURN wbh
  570. ENDPROC
  571. /**/
  572. /*"p_AddIcon(t_fullname,t_reelname,t_lock,t_size,t_idstr)"*/
  573. PROC p_AddIcon(t_fullname,t_reelname,t_size,t_idstr) 
  574. /*===============================================================================
  575.  = Para         : t_fullname (STRING),t_size (LONG),t_idstr (STRING)
  576.  = Return       : NONE.
  577.  = Description  : Add Def icons to a file(s) or/and dir(s).
  578.  ==============================================================================*/
  579.     DEF id_type
  580.     DEF id_icon[80]:STRING
  581.     DEF piv_str[256]:STRING
  582.     DEF fichier_source[256]:STRING
  583.     DEF fichier_destin[256]:STRING
  584.     DEF csdo:PTR TO diskobject
  585.     DEF fn[256]:STRING
  586.     StringF(fn,'\s',t_fullname)
  587.     dWriteF(['p_AddIcon()\s',' \s',' \d',' \s\n'],[t_fullname,t_reelname,t_size,t_idstr])
  588.     StrCopy(piv_str,addicondir,ALL)
  589.     id_type:=WhatIs(fn,[WI_DEEP,1])
  590.     id_icon:=GetIconName(id_type)
  591.     AddPart(piv_str,id_icon,256)
  592.     StringF(fichier_source,'\s',piv_str)
  593.     IF id_icon<>NIL
  594.         StringF(fichier_destin,'\s',t_fullname)
  595.         Forbid()
  596.         IF csdo:=GetDiskObject(fichier_source)
  597.             csdo.currentx:=NO_ICON_POSITION
  598.             csdo.currenty:=NO_ICON_POSITION
  599.             PutDiskObject(fichier_destin,csdo)
  600.             IF csdo THEN FreeDiskObject(csdo)
  601.         ELSE
  602.             p_MakeWVRequest(get_WhatView_string(MSGWHATVIEW_ADDICON),get_WhatView_string(MSGWHATVIEW_COMASS_GAD),[t_reelname,t_idstr,t_size])
  603.         ENDIF
  604.         Permit()
  605.     ELSE
  606.         p_MakeWVRequest(get_WhatView_string(MSGWHATVIEW_ADDICON),get_WhatView_string(MSGWHATVIEW_COMASS_GAD),[t_reelname,t_idstr,t_size])
  607.     ENDIF
  608. ENDPROC
  609. /**/
  610. /*"p_FlushWhatis()"*/
  611. PROC p_FlushWhatis() 
  612. /*===============================================================================
  613.  = Para         : NONE
  614.  = Return       : NONE
  615.  = Description  : Close Open and Flush the whatis.library.
  616.  ==============================================================================*/
  617.     DEF library:PTR TO lib
  618.     dWriteF(['p_FlushWhatIs()\n'],[0])
  619.     IF whatisbase
  620.         library:=whatisbase
  621.         CloseLibrary(whatisbase)
  622.         IF library.opencnt>0
  623.             p_MakeWVRequest(get_WhatView_string(MSGWHATVIEW_FLUSHLIB_BAD),get_WhatView_string(MSGWHATVIEW_COMASS_GAD),[library.opencnt])
  624.         ELSE
  625.             p_MakeWVRequest(get_WhatView_string(MSGWHATVIEW_FLUSHLIB_GOOD),get_WhatView_string(MSGWHATVIEW_COMASS_GAD),NIL)
  626.         ENDIF
  627.         whatisbase:=OpenLibrary('whatis.library',3)
  628.     ENDIF
  629.     AskReparse($01)
  630. ENDPROC
  631. /**/
  632. /*"main()"*/
  633. PROC main() HANDLE 
  634. /*===============================================================================
  635.  = Para         : NONE
  636.  = Return       : ER_NONE if ok,else the error.
  637.  = Description  : Main Procédure.
  638.  ==============================================================================*/
  639.     DEF testmain
  640.     localebase:=OpenLibrary('locale.library',0)
  641.     open_WhatView_catalog(NIL,NIL)
  642.     tattr:=['topaz.font',8,0,0]:textattr
  643.     IF (testmain:=p_OpenLibraries())<>ER_NONE THEN Raise(testmain)
  644.     IF wbmessage<>NIL
  645.         IF (testmain:=p_StartWb())<>ER_NONE THEN Raise(testmain)
  646.     ELSE
  647.         IF (testmain:=p_StartCli())<>ER_NONE THEN Raise(testmain)
  648.     ENDIF
  649.     p_DoReadHeader({banner})
  650.     testmain:=FindPort('WhatViewPort') 
  651.     IF testmain THEN Raise(ER_PORTEXIST)
  652.     IF (testmain:=p_InitWVAPP())<>ER_NONE THEN Raise(testmain)
  653.     SetVar('WVICDEF',addicondir,EstrLen(addicondir),GVF_GLOBAL_ONLY)
  654.     IF (testmain:=p_ReadPrefsFile('Env:WhatView.prefs'))=FALSE THEN Raise(ER_NOPREFS)
  655.     IF (testmain:=p_InitCx())<>ER_NONE THEN Raise(testmain)
  656.     /* l'initialisation du WBstart-handler est maintenant dans la procédure p_WBRun() */
  657.     REPEAT
  658.         p_LookAllMessage()
  659.     UNTIL reelquit=TRUE
  660.     Raise(ER_NONE)
  661. EXCEPT
  662.     IF wv_window THEN p_CloseWindow()
  663.     IF info_window THEN p_CloseInfoWindow()
  664.     p_RemCx()
  665.     IF myw THEN p_RemWVAPP()
  666.     IF baselock THEN CurrentDir(baselock)
  667.     p_CloseLibraries()
  668.     SELECT exception
  669.         CASE ER_LOCKSCREEN; WriteF(get_WhatView_string(MSGERWHATVIEW_ER_LOCKSCREEN))
  670.         CASE ER_VISUAL;     WriteF(get_WhatView_string(MSGERWHATVIEW_ER_VISUAL))
  671.         CASE ER_CONTEXT;    WriteF(get_WhatView_string(MSGERWHATVIEW_ER_CONTEXT))
  672.         CASE ER_MENUS;      WriteF(get_WhatView_string(MSGERWHATVIEW_ER_MENUS))
  673.         CASE ER_GADGET;     WriteF(get_WhatView_string(MSGERWHATVIEW_ER_GADGET))
  674.         CASE ER_WINDOW;     WriteF(get_WhatView_string(MSGERWHATVIEW_ER_WINDOW))
  675.         CASE ER_NOICON;     WriteF(get_WhatView_string(MSGERWHATVIEW_ER_NOICON))
  676.         CASE ER_BADARGS;    WriteF(get_WhatView_string(MSGERWHATVIEW_ER_BADARGS))
  677.         CASE ER_NOPREFS;    WriteF(get_WhatView_string(MSGERWHATVIEW_ER_NOPREFS))
  678.         CASE ER_APPWIN;     WriteF(get_WhatView_string(MSGERWHATVIEW_ER_APPWIN))
  679.         CASE ER_APPITEM;    WriteF(get_WhatView_string(MSGERWHATVIEW_ER_APPITEM))
  680.         CASE ER_PORT;       WriteF(get_WhatView_string(MSGERWHATVIEW_ER_PORT))
  681.         CASE ER_PORTEXIST;  WriteF(get_WhatView_string(MSGERWHATVIEW_ER_PORTEXIST))
  682.         CASE ER_SIG;        WriteF(get_WhatView_string(MSGERWHATVIEW_ER_SIG))
  683.         CASE ER_CX;         WriteF(get_WhatView_string(MSGERWHATVIEW_ER_CX))
  684.         CASE ER_INTUITIONLIB; WriteF(get_WhatView_string(MSGERWHATVIEW_ER_INTUITIONLIB))
  685.         CASE ER_GADTOOLSLIB;  WriteF(get_WhatView_string(MSGERWHATVIEW_ER_GADTOOLSLIB))
  686.         CASE ER_GRAPHICSLIB;  WriteF(get_WhatView_string(MSGERWHATVIEW_ER_GRAPHICSLIB))
  687.         CASE ER_WHATISLIB;    WriteF(get_WhatView_string(MSGERWHATVIEW_ER_WHATISLIB))
  688.         CASE ER_REQTOOLSLIB;  WriteF(get_WhatView_string(MSGERWHATVIEW_ER_REQTOOLSLIB))
  689.         CASE ER_EXECLIB;      WriteF(get_WhatView_string(MSGERWHATVIEW_ER_EXECLIB))
  690.         CASE ER_WORKBENCHLIB; WriteF(get_WhatView_string(MSGERWHATVIEW_ER_WORKBENCHLIB))
  691.         CASE ER_UTILITYLIB;   WriteF(get_WhatView_string(MSGERWHATVIEW_ER_UTILITYLIB))
  692.         CASE ER_DOSLIB;       WriteF(get_WhatView_string(MSGERWHATVIEW_ER_DOSLIB))
  693.         CASE ER_ICONLIB;      WriteF(get_WhatView_string(MSGERWHATVIEW_ER_ICONLIB))
  694.         CASE ER_REXXSYSLIBLIB; WriteF(get_WhatView_string(MSGERWHATVIEW_ER_REXXSYSLIBLIB))
  695.         CASE ER_COMMODITIESLIB; WriteF(get_WhatView_string(MSGERWHATVIEW_ER_COMMODITIESLIB))
  696.     ENDSELECT
  697.     close_WhatView_catalog()
  698.     IF localebase THEN CloseLibrary(localebase)
  699.     CleanUp(exception)
  700. ENDPROC
  701. /**/
  702.